﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using fideeraSoft.Entities;
using System.Data.SqlClient;
using fideeraSoft.Utils;
using fideeraSoft.DAO;

namespace fideeraSoft.DAOimpl
{
    public class RemitoSalidaXProduccionDAOSQLimpl : RemitoSalidaXProduccionDAO
    {

        #region ALTA RemitoSalida X PRODUCCION
        public void altaRemitoSalida_X_Produccion(RemitoSalida_X_Produccion remSalidaXPrdo)
        {
            SqlConnection conn = null;
            try
            {
                conn = SQLclass.conectarSQL();
                conn.Open();
              
                //string query = "SET IDENTITY_INSERT RemitoEntrada_X_Lote ON; INSERT INTO RemitoEntrada_X_Lote (lote,remitoEntrada) VALUES (@IdLote,@IdRemitoEntrada)";
                string query = "SET IDENTITY_INSERT RemitoSalida_X_Produccion ON; INSERT INTO RemitoSalida_X_Produccion (ID,Produccion,RemitoSalida,cantidadProductos) VALUES (@Id,@IdProduccion,@IdRemitoSalida,@CantidadProductos)";

                SqlCommand cmd = new SqlCommand(query, conn);

                cmd.Parameters.AddWithValue("@Id", remSalidaXPrdo.Id);
                cmd.Parameters.AddWithValue("@IdProduccion", remSalidaXPrdo.Produccion );

                cmd.Parameters.AddWithValue("@IdRemitoSalida",remSalidaXPrdo.RemitoSalida);
                cmd.Parameters.AddWithValue("@CantidadProductos", remSalidaXPrdo.CantidadProductos);
                


                cmd.ExecuteNonQuery();
                //cmd.Parameters.Clear();
                // cmd.CommandText = "SELECT @@IDENTITY";
                // int insertID=Convert.ToInt32(cmd.ExecuteScalar());

                //  cmd.Dispose();
                cmd = null;

            }
            catch (Exception e)
            {
                CLogger.Append("[altaRemitoSalida_X_Produccion] Exception alta: " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[altaRemitoSalida_X_Produccion] Exception alta: " + e);
            }
            finally
            {
                conn.Close();
            }

        }

        #endregion


        #region BUSCAR ULTIMO ID DE REMITO SALIDA X PRODUCCION
        public int buscarNuevoUltimoIdRemitoSalidaXProduccionEnBD()
        {
            int ID = 0;
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "SELECT TOP 1 ID FROM RemitoSalida_X_Produccion ORDER BY ID DESC ";
                SqlCommand cmd = new SqlCommand(query, conn);

                SQLclass.commandQuery(conn, cmd, query);
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {

                    while (reader.Read())
                    {
                        ID = reader.GetInt32(0);
                        //  CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] ID : " + ID, CLogger.ERROR);      //DEBUG
                    }
                    ID++;
                }
                else
                {
                    ID = 1;
                }
            }
            catch (Exception e)
            {
                CLogger.Append("[buscarNuevoUltimoIdRemitoSalidaXProduccionEnBD] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[buscarNuevoUltimoIdRemitoSalidaXProduccionEnBD] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
            // CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] RETURN ID : " + ID, CLogger.ERROR);      //DEBUG
            return ID;
        }

        #endregion

         #region BUSCAR Lista dE RemitoSALIDA X PRODUCCION por ID
        public List<RemitoSalida_X_Produccion> getListaRemitoSalidaXProduccionPorIdRemito(string idRemito)
        {

            List<RemitoSalida_X_Produccion> lstRemSalidaXProd;
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "SELECT * FROM RemitoSalida_X_Produccion WHERE remitoSalida='"+idRemito+"'";
                SqlCommand cmd = new SqlCommand(query, conn);

                SQLclass.commandQuery(conn, cmd, query);
                SqlDataReader reader = cmd.ExecuteReader();

                if (reader.HasRows)
                {
                    lstRemSalidaXProd= new List<RemitoSalida_X_Produccion>();
                    while (reader.Read())
                    {
                        RemitoSalida_X_Produccion remSalidaXProd= new RemitoSalida_X_Produccion();

                        remSalidaXProd.Id= reader.GetInt32(0);
                        remSalidaXProd.Produccion = reader.GetInt32(1);
                        remSalidaXProd.RemitoSalida = reader.GetInt32(2);
                        remSalidaXProd.CantidadProductos= reader.GetInt32(3);

                        lstRemSalidaXProd.Add(remSalidaXProd);
                        //  CLogger.Append("[getListaRemitoSalidaXProduccionPorIdRemito] ID : " + ID, CLogger.ERROR);      //DEBUG
                    }                    
                }
                else
                {
                    lstRemSalidaXProd=null;
                }
            }
            catch (Exception e)
            {
                CLogger.Append("[getListaRemitoSalidaXProduccionPorIdRemito] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[getListaRemitoSalidaXProduccionPorIdRemito] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
            // CLogger.Append("[buscarNuevoUltimoIdProveedorEnBD] RETURN ID : " + ID, CLogger.ERROR);      //DEBUG
            return lstRemSalidaXProd;
        }

        #endregion


        #region ELIMINAR REMITO SALIDA X PRODUCCION
        public void eliminarRemitoSalidaXProduccion(int id)
        {
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "DELETE FROM RemitoSalida_X_Produccion WHERE ID='" + id.ToString() + "'";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();

            }
            catch (Exception e)
            {
                CLogger.Append("[eliminarRemitoSalidaXProduccion] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[eliminarRemitoSalidaXProduccion] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
        }

        #endregion

        #region ELIMINAR Todos LOS REMITOs SALIDA X PRODUCCION
        public void eliminarTodosLosRemitosSalidaXProduccionEnDb()
        {
            SqlConnection conn = SQLclass.conectarSQL();
            try
            {
                conn.Open();

                string query = "DELETE FROM RemitoSalida_X_Produccion";
                SqlCommand cmd = new SqlCommand(query, conn);
                cmd.ExecuteNonQuery();

            }
            catch (Exception e)
            {
                CLogger.Append("[eliminarTodosLosRemitosSalidaXProduccionEnDb] Exception : " + e, CLogger.ERROR);      //DEBUG
                throw new MiException("[eliminarTodosLosRemitosSalidaXProduccionEnDb] Exception: " + e);
            }
            finally
            {
                conn.Close();
            }
        }

        #endregion

        
    }
}
